package com.gitee.wsl.time.chinese.bean.eightchar

import com.gitee.wsl.ext.base.length
import com.gitee.wsl.time.chinese.Lunar
import com.gitee.wsl.time.chinese.util.LunarUtil
import kotlin.collections.get


/**
 * 流年
 *
 * @author 6tail
 */
class LiuNian(
    /**
     * 大运
     */
    private val daYun: DaYun,
    /**
     * 序数，0-9
     */
    val index: Int
) {
    /**
     * 年
     */
    val year: Int

    /**
     * 年龄
     */
    val age: Int

    private val lunar: Lunar = daYun.getLunar()

    init {
        this.year = daYun.startYear + index
        this.age = daYun.startAge + index
    }

    val ganZhi: String
        /**
         * 获取干支
         *
         * @return 干支
         */
        get() {
            // 干支与出生日期和起运日期都没关系
            var offset: Int = LunarUtil.getJiaZiIndex(
                lunar.jieQiTable.get("立春")!!.lunar.yearInGanZhiExact
            ) + this.index
            if (daYun.index > 0) {
                offset += daYun.startAge - 1
            }
            offset %= LunarUtil.JIA_ZI.length
            return LunarUtil.JIA_ZI[offset]
        }

    val xun: String
        /**
         * 获取所在旬
         * @return 旬
         */
        get() = LunarUtil.getXun(this.ganZhi)

    val xunKong: String
        /**
         * 获取旬空(空亡)
         * @return 旬空(空亡)
         */
        get() = LunarUtil.getXunKong(this.ganZhi)

    val liuYue: Array<LiuYue>
        /**
         * 获取流月
         * @return 流月
         */
        get() {
            val n = 12
//            val l: Array<LiuYue?> = kotlin.arrayOfNulls<LiuYue>(n)
//            for (i in 0..<n) {
//                l[i] = LiuYue(this, i)
//            }
//            return l
            return Array<LiuYue>(n){i->
                LiuYue(this, i)
            }
        }
}
